Computing devices render a three-dimensional object in a three-dimensional space by projecting the three-dimensional object in the three-dimensional space on a two-dimensional display of a display device. In other words, a two-dimensional representation of the three-dimensional object in the three-dimensional space is displayed on the display of the display device. The two-dimensional representation of the three-dimensional object is viewed on the display of the display device from a point of view that can move within the three-dimensional space. This point of view is defined by an object view vector. For example, the user may adjust the point of view (object view vector) to examine the three-dimensional object from different perspectives without moving the three-dimensional object within the three-dimensional space. Movements of the object view vector in the three-dimensional space are observed by the user as changes in the two-dimensional representation of the three-dimensional object on the display.
The three-dimensional object can also be moved and manipulated in the three-dimensional space. The user's manipulation of the three-dimensional object is limited to two-dimensional movements of a user input, such as with a mouse input device. To reflect these two-dimensional movements, an interaction plane is used to project the user's two-dimensional movements into the three-dimensional space. In this manner, the three-dimensional object in the three-dimensional space is projected on the two-dimensional display where two-dimensional manipulations of the two-dimensional representation of the three-dimensional object are projected into the three-dimensional space by the interaction plane. These movements of the three-dimensional object in the three-dimensional space are also observed by the user as changes in the two-dimensional representation of the three-dimensional object on the display.
Ray casting may be used to determine how a user intends for the three-dimensional object to move in the three-dimensional space based on the user's two-dimensional user inputs. This is accomplished by processing intersection tests between rays and the interaction plane. A ray is cast through a viewing plane and onto the interaction plane when a user begins and ends a two-dimensional manipulation of the three-dimensional object. The difference between the beginning ray and the ending ray on the interaction plane is used to determine how the user intends for the three-dimensional object to move in the three-dimensional space.
Manipulation of a three-dimensional object projected on a two-dimensional display device in accordance with a user's intentions is challenging when an object view vector is aligned, or nearly aligned, with the interaction plane used to project the three-dimensional object in the three-dimensional space. This is challenging because ray cast intersection information is limited when the object view vector is aligned, or nearly aligned, with the interaction plane. In other words, reflecting a user's expectation for relative movements of an object view vector and a three-dimensional object is challenging when an angle between the object view vector and the interaction plane is a small angle. In this situation, a user's attempts to manipulate either the three-dimensional object or the object view vector may result in disproportionally large displacements of the three-dimensional object relative to the object view vector, or the object view vector relative to the three-dimensional object. Also, in this situation, the user's attempts to manipulate either the three-dimensional object or the object view vector may result in disproportionally small displacements, or no displacement, of the three-dimensional object relative to the object view vector or the object view vector relative to the three-dimensional object.